/*=============================================================================

  APPLICATION MANAGER MODULE

  FILE: IOmgr.cpp
  
  DESCRIPTION

    Manager Module Definition

  EXTERNALIZED FUNCTIONS

    
  Copyright (c) DaeSung Engineering Inc. All rights reserved.

=============================================================================*/
/*=============================================================================

                             EDIT HISTORY

  ---------  -------  -------------------------------------------------------
    when       who     what, where, why
  ---------  -------  -------------------------------------------------------
   06/28/03   nso4th   Version 0.1

=============================================================================*/

/*=============================================================================
  HEADER INCLUSION
=============================================================================*/
#include "IOmgr_MOD.h"

/*=============================================================================
  CONSTANT DEFINITION
=============================================================================*/
#define IOmgr_SIGT_TIME			(500)

/*=============================================================================
  COMMAND HANDLER
=============================================================================*/
void IOmgr::CMD_Alloc(void)
{
	// Signal tower
	m_sigColor = IOmgr_SIGT_NONE;
	m_sigOn = FALSE;
}

void IOmgr::CMD_Free(void)
{

}

void IOmgr::Command_Handler(dword cmd, dword wp, dword lp)
{
	switch(cmd)
	{
	case IOmgr_IOUPDATE_C:
	{
		CMD_IOUpdate();
		break;
	}
	case IOmgr_SIGT_C:
	{
		CMD_SIGT((byte)wp);
		break;
	}
	}
}

void IOmgr::CMD_IOUpdate(void)
{
	MON_IOUPDATE(FALSE);
}

void IOmgr::CMD_SIGT(byte sigColor)
{
	if(m_sigColor == sigColor)
		return;

	// Stop Timer
	Timer_Dereg(IOmgr_TM_SIGT_ID);
	m_sigOn = FALSE;
	
	if(sigColor == IOmgr_SIGT_NONE)
	{
		OUT_SIGT(IOmgr_SIGT_NONE);

		m_sigOn = FALSE;
		m_sigColor = sigColor;
		return;
	}
	// Turn-ON in initial state
	OUT_SIGT(sigColor);

	// Register timer
	if(ISMASKON(sigColor, IOmgr_SIGT_GREEN_BLINK) \
		|| ISMASKON(sigColor, IOmgr_SIGT_YELLOW_BLINK)
		|| ISMASKON(sigColor, IOmgr_SIGT_RED_BLINK))
	{
		Timer_Reg(IOmgr_TM_SIGT_ID, IOmgr_SIGT_TIME);
	}
	else
	{
		Timer_Dereg(IOmgr_TM_SIGT_ID);
	}
	
	m_sigColor = sigColor;
}

/*=============================================================================
  LOCALIZED FUNCTION IMPLEMENTATION
=============================================================================*/
//---------------------------------------------------------
// SIGNAL-TOWER
//---------------------------------------------------------
static dword SIGT_MASK(dword sigCh);
void IOmgr::OUT_SIGT(byte sigColor)
{
	/*		----------------------2013. 10. 21. jyko
	HIO				*io = (HIO*)ObjList_Get(HIO_DEV);
	dword			prev_out, new_out;
	dword			all_mask = 0x00000000;
	dword			on_mask = 0x00000000;
	
	if(io->IsOutput32Ex(0, &prev_out) == FALSE)
		return;
	
	all_mask = SIGT_MASK(IO_SIG_RED_OUT);
	all_mask |= SIGT_MASK(IO_SIG_YELLOW_OUT);
	all_mask |= SIGT_MASK(IO_SIG_GREEN_OUT);
	all_mask |= SIGT_MASK(IO_RESET_LED_OUT);
	
	if(ISMASKON(sigColor, IOmgr_SIGT_RED))
	{
		on_mask |= SIGT_MASK(IO_SIG_RED_OUT);
		on_mask |= SIGT_MASK(IO_RESET_LED_OUT);
	}
	if(ISMASKON(sigColor, IOmgr_SIGT_YELLOW))
	{
		on_mask |= SIGT_MASK(IO_SIG_YELLOW_OUT);
	}
	if(ISMASKON(sigColor, IOmgr_SIGT_GREEN))
	{
		on_mask |= SIGT_MASK(IO_SIG_GREEN_OUT);
	}
	
	new_out = ((prev_out & (~(all_mask))) | on_mask);

	if(new_out != prev_out)
	{
		io->Output32Ex(0, new_out);
	}
	*/
}

dword SIGT_MASK(dword sigCh)
{
	dword		mask;

	if(sigCh > 32)
		return	(0x00000000);

	mask = (0x01 << sigCh);
		
	return	mask;
}
/*--- END OF IOmgr_CMD.CPP ---*/
